/*-------------------------------------------------------------------------
 *
 * backendid.h
 *	  POSTGRES backend id communication definitions
 *
 *
 * Portions Copyright (c) 2012-2014, TransLattice, Inc.
 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/storage/backendid.h
 *
 *-------------------------------------------------------------------------
 */
#ifndef BACKENDID_H
#define BACKENDID_H

/* ----------------
 *		-cim 8/17/90
 * ----------------
 */
typedef int BackendId;			/* unique currently active backend identifier */

#define InvalidBackendId		(-1)

extern PGDLLIMPORT BackendId MyBackendId;	/* backend id of this backend */

#ifdef XCP
/*
 * Two next variables make up distributed session id. Actual distributed
 * session id is a string, which includes coordinator node name, but
 * it is better to use Oid to store and compare with distributed session ids
 * of other backends under the same postmaster.
 */
extern PGDLLIMPORT Oid MyCoordId;
extern PGDLLIMPORT char MyCoordName[NAMEDATALEN];

extern PGDLLIMPORT int MyCoordPid;
extern uint64 MyCoordTimestamp;

/* BackendId of the first backend of the distributed session on the node */
extern PGDLLIMPORT BackendId MyFirstBackendId;
/* ProcPid of the first backend of the distributed session on the node */
extern PGDLLIMPORT int32 MyFirstProcPid;
/* Process start Time of the first backend of the distributed session on the node */
extern PGDLLIMPORT uint64 MyFirstProcStartTime;
#endif
/* backend id of our parallel session leader, or InvalidBackendId if none */
extern PGDLLIMPORT BackendId ParallelMasterBackendId;

/*
 * The BackendId to use for our session's temp relations is normally our own,
 * but parallel workers should use their leader's ID.
 */
#define BackendIdForTempRelations() \
	(ParallelMasterBackendId == InvalidBackendId ? MyBackendId : ParallelMasterBackendId)

#endif							/* BACKENDID_H */
